#include <stdio.h>
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "iot_gpio.h"
#include "iot_gpio_ex.h"

// 引脚定义
#define LED1_GPIO 7
#define LED2_GPIO 13

// LED状态
#define LED_ON 1
#define LED_OFF 0

// 任务参数
#define TASK_STACK 1024 * 4
#define TASK_PRIO 25
#define BLINK_INTERVAL 100 // 1秒

// 初始化所有LED
static void LedInit(void)
{
    IoTGpioInit(LED1_GPIO);
    IoTGpioSetFunc(LED1_GPIO, IOT_GPIO_FUNC_GPIO_7_GPIO);
    IoTGpioSetDir(LED1_GPIO, IOT_GPIO_DIR_OUT);
    
    IoTGpioInit(LED2_GPIO);
    IoTGpioSetFunc(LED2_GPIO, IOT_GPIO_FUNC_GPIO_8_GPIO); // 确保引脚8定义正确
    IoTGpioSetDir(LED2_GPIO, IOT_GPIO_DIR_OUT);
    
    printf("LEDs initialized\r\n");
}

// 任务1：LED1常亮
static void Led1Task(void *arg)
{
    (void)arg;
    LedInit(); // 初始化所有LED
    IoTGpioSetOutputVal(LED1_GPIO, LED_ON); // LED1常亮
    printf("LED1: Always ON\r\n");
    
    while(1) osDelay(1000); // 空循环，保持任务运行
}

// 任务2：LED2闪烁
static void Led2Task(void *arg)
{
    (void)arg;
    int state = LED_OFF;
    
    while(1) {
        state = !state; // 切换状态
        IoTGpioSetOutputVal(LED2_GPIO, state);
        printf("LED2: %s\r\n", state ? "ON" : "OFF");
        osDelay(BLINK_INTERVAL); // 延时1秒
    }
}

// 创建两个任务
void LedDemoEntry(void)
{
    osThreadAttr_t attr = {
        .name = "LedTask",
        .attr_bits = 0U,
        .cb_mem = NULL,
        .cb_size = 0U,
        .stack_mem = NULL,
        .stack_size = TASK_STACK,
        .priority = TASK_PRIO,
    };
    
    // 创建LED1任务
    if (osThreadNew(Led1Task, NULL, &attr) == NULL) {
        printf("Failed to create Led1Task\r\n");
    }
    
    // 创建LED2任务（复用attr，仅修改名称）
    attr.name = "Led2Task";
    if (osThreadNew(Led2Task, NULL, &attr) == NULL) {
        printf("Failed to create Led2Task\r\n");
    }
    
    printf("LED tasks created\r\n");
}

// 系统启动入口
APP_FEATURE_INIT(LedDemoEntry);
